#include <iostream>
using namespace std;
//实验内容：
//定义一个Point类，包括：
//两个私有数据成员：int x, int y，它们分别表示一个点的x和y座标。
//构造函数：
//Point(int x, int y)，即传两个参数，构造一个点对象。
//注意，本题要求Point类不得定义缺省构造函数，也就是只定义以上所说的构造函数。
//成员函数：
//Move(int dx, int dy)，将Point对象移动dx, dy的距离。

class Point
{
public:
    Point(int x, int y);
    void move(int dx, int dy);
    int getX() const;
    int getY() const;
protected:
    int _x;
    int _y;
};
Point::Point(int x,int y)
    :_x(x)
    ,_y(y)
{}
void Point::move(int dx, int dy)
{
    _x += dx;
    _y += dy;
}
int Point::getX() const { return _x; }
int Point::getY() const { return _y; }

//定义一个Rectangle类，继承Point类，基类对象的x和y表示长方形左上角的坐标。
//Rectangle类包括：
//两个私有数据成员：int width, int height，它们分别表示长方形的横向的宽度和纵向的高度。
//构造函数：
//Rectangle(int x, int y, int width, int height)。
//成员函数：
//int getArea()    //获取该图形的面积
//bool isIn(Point p)   //判断传入的点是否在该图形之内（不包括边界），如果在内部返回true，否则返回false

class Rectangle : public Point
{
public:
    Rectangle(int x, int y, int width, int height);
    int getArea();
    bool isIn(const Point& p);
protected:
    int _width;
    int _height;
};

Rectangle::Rectangle(int x, int y, int width, int height)
    :Point(x, y)
    , _width(width)
    ,_height(height)
{}

int Rectangle::getArea()
{
    return _width * _height;
}

bool Rectangle::isIn(const Point& p)
{
    return p.getX() > _x && p.getX() < _x + _width
        && p.getY() > _y && p.getY() < _y + _height;
}

//使用main函数测试以上getArea方法和isIn方法。main函数使用如下代码：
int main()
{
    int topLeftX, topLeftY, width, height;
    int px, py, dx, dy;

    cin >> topLeftX >> topLeftY >> width >> height;
    cin >> px >> py;
    cin >> dx >> dy;

    Point p(px, py);
    Rectangle r(topLeftX, topLeftY, width, height);
    cout << r.getArea() << endl;
    if (r.isIn(p))
        cout << "In" << endl;
    else
        cout << "Not in" << endl;
    r.move(dx, dy);
    if (r.isIn(p))
        cout << "In" << endl;
    else
        cout << "Not in" << endl;
    return 0;
}
